import { getSysUserInfoApi, getUserinfoApi, login } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router'
const state = {
  token: getToken() || '', // 用户的token
  userInfo: {} // 用户基本资料
}
const mutations = {
  // 储存token
  setToken(state, newToken) {
    state.token = newToken
  },

  // 储存用户资料
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },

  // 清除token
  removeToken(state) {
    state.token = ''
    // 清除浏览器缓存里面的token
    removeToken()
  },

  // 清除用户资料
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  // 走登录接口
  async getlogin({ commit }, data) {
    // 发送请求获取token
    const res = await login(data)

    // 提交mutation，将token存到state中
    commit('setToken', res.data)
    // 对token做长期保存
    setToken(res.data)
    return res
  },
  // getlogin({ commit }, data) {
  //   const p = new Promise((resolve, reject) => {
  //     login(data)
  //       .then(() => {
  //         resolve()
  //       })
  //       .catch(() => {
  //         reject()
  //       })
  //   })
  //   return p
  // }

  // 请求接口拿用户的基本资料
  // 此处不解构了
  // 简化 Promise(1下面的代码)
  async getUserinfo(context) {
    // 这个接口不带用户头像
    const res = await getUserinfoApi()
    // 基于前面的得到的结果（userid)来请求
    const res1 = await getSysUserInfoApi(res.data.userId)
    // 合并用户的个人信息数据
    const obj = {
      ...res.data,
      ...res1.data
    }
    context.commit('setUserInfo', obj)
    return obj

    // 1
    // const p = new Promise((resolve, reject) => {
    //   getUserinfoApi()
    //     .then((res) => {
    //       context.commit('setUserInfo', res.data)
    //     })
    //     .catch(() => {
    //       reject()
    //     })
    // })
    // return p
  },

  // 退出登录方法（统一放在一起）
  logout({ commit }) {
    commit('removeToken')
    commit('removeUserInfo')
    resetRouter()
    commit('routes/setRoutes', [], { root: true })
    commit('settings/resetTheme', [], { root: true })
  }
}
const getters = {}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}
